package arm.common.tools;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * User: Ruslan.Taigumbayev
 * Date: 28.05.11
 * Time: 2:57
 */
public class Tools
{
    /**
         * Вычисление md5 хэша строки
         * @param text строка для хэштрования
         * @return хэшированная строка
         * @throws NullPointerException Исключение при отсутсвии сроки
         */
        public static byte[] md5(String text) {
            // arguments check
            if (text == null) {
                throw new NullPointerException("null text");
            }

            try {
                MessageDigest md = MessageDigest.getInstance("MD5");
                md.update(text.getBytes());
                return md.digest();
            }
            catch (NoSuchAlgorithmException e) {
                throw new RuntimeException("Cannot find MD5 algorithm");
            }
        }

        /**
         * Вычисление md5 хэша сроки в формате hexadecimal
         * @param text строка для хэштрования
         * @return хэшированная строка
         * @throws NullPointerException Исключение при отсутсвии сроки
         */
        public static String md5AsHexString(String text) {
            return toHexString(md5(text));
        }

        /**
         * Получение значения
         * @param bytes массив байт
         * @return строка в формате hexadecimal представленая массивом байт
         * @throws IllegalArgumentException Исключение если массив байт пустой
         */
        public static String toHexString(byte[] bytes) {
            if (bytes == null) {
                throw new IllegalArgumentException("byte array must not be null");
            }
            StringBuffer hex = new StringBuffer(bytes.length * 2);
            for (int i = 0; i < bytes.length; i++) {
                hex.append(Character.forDigit((bytes[i] & 0XF0) >> 4, 16));
                hex.append(Character.forDigit((bytes[i] & 0X0F), 16));
            }
            return hex.toString();
        }

    public static void main(String[] args) {
        System.out.println(md5AsHexString("admin"));
    }

}